<?php
/*
 * $Id: function.php 2008-9-30
 * -------------------------------------------
 * 网址：www.leagoo.com
 * -------------------------------------------
*/
if (!defined('IN_SITE')){ die('Hacking attempt!'); } 
/**
 * 功能：批量处理trim函数
 * 参数：$post 要处理的数据； $savekey不要求的数组键
**/
function acrossTrim($post,$savekey=''){
	if (!$savekey){
		$savekey = array();
	}
	if (is_array($post)){
		foreach ($post as $key=>$value){
			
			if (array_key_exists($key,$savekey)){
				break;
			}else {
				if (is_array($value)){
					$post[$key] = acrossTrim($value,$savekey);    /////递归
				}else {
					$post[$key] = trim($value);
				}
			}
		}
	}else {
		$post = trim($post);
	}
	return $post;
}
function getFileWithVar($filename='',$unarray=''){
	if (empty($filename)){
		$filename = end(explode('/',isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']));
	}
	if (empty($unarray)){ $unarray = array();}
	$varlink = '';
	if (is_array($_GET)){
		foreach ($_GET as $key=>$value){
			if (!in_array($key,$unarray)){
				$varlink .= $varlink ? "&$key=$value" : "?$key=$value";
			}
		}
		$varlink .= $varlink ? '&' : '?';
		return $filename.$varlink;
	}
}
/**
 * 功能：批量做smarty模板赋值
 * 参数：$array 赋值数组，格式：array('模板参数名',赋值内容)
**/
function assignMore($array){
	global $t;
	if(is_array($array)){
		foreach($array as $key=>$value){
			$t->assign($key,$value);
		}
	}else{
		return false;
	}
}

/**
 * 功能：输出生成静态文件 set Smarty , then outfile
 * 参数：$array 赋值数组，格式：array('模板参数名',赋值内容)
**/
function putfile( $file = "./index.html", $content = "") {
	@chmod( $file , 0777 );
	$fp = @fopen( $file, "w" );
	if( ! $fp ) {
		echo "<strong>注意：</strong>文件创建失败。请务必保持指定路径正确无误，并可写。";
		echo $file;
		exit;
	}
	if( !fwrite( $fp, $content ) ) {
		echo "<strong>注意：</strong>文件写入失败。请重试!";
		exit;
	}
	fclose( $fp );
	@chmod( $file , 0777 );
}

/*
 * 功能：连续建目录
 * $dir 目录字符串
 */
function makedir( $dir, $mode = 0777,$type = false) {
	if( ! $dir ) return 0;
	if ($type){
		$dir = dirname($dir);
	}
	$dir = str_replace( "\\", "/", $dir );
	$dir = explode( "/", $dir );
	$mdir = "";
	foreach( $dir as $val ) {
		if( $val == ".." || $val == "." ) continue;
		$mdir .= $val."/";	
		if( !file_exists( $mdir ) ) {
			if(!@mkdir( $mdir, $mode )){
				echo "创建目录 [".$mdir."]失败.";
				exit;
			}
		}else {
			@chmod( $mdir, $mode );
		}
	}
	return true;
}
/*
 * 功能：删除文件 删除整个文件夹
 * $dir 目录字符串 ，可以是目录，也可以是文件
 */
function deleteDir($dir){
	if (is_dir($dir)) {
		if ($dp = opendir($dir)) {
			while (($file=readdir($dp)) != false) {
				$newdir = $dir.'/'.$file;
				if (is_dir($newdir) && $file!='.' && $file!='..') {
					deleteDir($newdir);
				} elseif (is_file($newdir)) {
					if (unlink($newdir) == false){
						@chmod( $newdir , 0777 );
						unlink($newdir);
					}
				}
			}
			closedir($dp);
			if (rmdir($dir) == false){
				@chmod( $dir , 0777 );
				rmdir($dir);
			}
		} else {
			@chmod( $dir , 0777 );
			deleteDir($dir);
		}
	}elseif (is_file($dir)){
		if (unlink($dir) == false){
			@chmod( $dir , 0777 );
			unlink($dir);
		}
	}
} 

/*
 * 中文截取，支持gb2312,gbk,utf-8,big5 
 *
 * @param string $str 要截取的字串
 * @param int $start 截取起始位置
 * @param int $length 截取长度
 * @param string $charset utf-8|gb2312|gbk|big5 编码
 * @param $suffix 是否加尾缀
*/
function cut_str($str, $length, $start=0, $charset="utf-8", $suffix=true){
	if(function_exists("mb_substr")){
	    if(mb_strlen($str, $charset) <= $length) return $str;
	    $slice = mb_substr($str, $start, $length, $charset);
	}else{
		$re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
		$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
		$re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
		$re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
		preg_match_all($re[$charset], $str, $match);
		if(count($match[0]) <= $length) return $str;
		$slice = join("",array_slice($match[0], $start, $length));
	}
	if($suffix) return $slice."…";
	return $slice;
}
/*
 * 防注入处理(为变量加入斜杠)函数
 * 参数 $array 为防注入变量数组
*/
function addslashes_deep($value){
	$value = is_array($value) ? array_map('addslashes_deep', $value) : (isset($value) ? addslashes($value) : null);     
	return $value;
} 
//转义字符
function stripslashes_deep($value){
	$value = is_array($value)?array_map('stripslashes_deep',$value):(isset($value)?stripslashes($value):null);   
	return $value;
}
/*
 * 转换HTML特殊字符(表单提交的时候使用，防止恶意JS代码)
 * 参数 $array 为需转换的字符串或者数组
*/
function specialhtml($value,$undeal=''){
	if (is_array($undeal)){
		$undealArray = $undeal;
	}elseif($undeal) {
		$undealArray[] = $undeal;
	}else{
		$undealArray = array();
	}
	if (is_array($value)){
		foreach ($value as $key=>$var){
			if (is_array($var)){
				specialhtml($var,$undeal);
			}else {
				if (!in_array($key,$undealArray))
				$value[$key] = htmlspecialchars($var,ENT_QUOTES);
			}
		}
	}else {
		$value = htmlspecialchars($value,ENT_QUOTES);
	}
    //$value = is_array($value) ? array_map('specialhtml', $value) : htmlspecialchars($value,ENT_QUOTES);
	return $value;
}

/**
 * 功能：格式化文本输出
 * 参数：$text 为需格式化的文本内容
**/
function formatContent($text){
	$trans = get_html_translation_table(HTML_SPECIALCHARS);
	$trans = array_flip($trans);
	$newtext = strtr($text, $trans);
	//$newtext = str_replace("\n", "<br>", $text);
	//$newtext = str_replace(" ", "&nbsp;", $text);
	return $newtext;
}

/**
 * 功能：设置地址函数
 * 参数：$values 需要转换为地址格式的字符串
**/
function setUrl($values,$type=false){
	if($type){ $values = strtolower($values); }
	$pattern = "/[^\w+]/";
	$replacement = "-";
	return preg_replace($pattern, $replacement, $values);
}

/**
 * 功能：返回图片文件类型
 * 参数：$type 图片$_FILES["Cfile"]["type"]的值
**/
function getPicType($type){
	switch ($type){
		case 'image/jpeg':
		case 'image/jpg':
		case 'image/pjpeg':
			$pic_filetype = '.jpg';
			break;
		
		case 'image/png':
		case 'image/x-png':
			$pic_filetype = '.png';
			break;
	
		case 'image/gif':
			$pic_filetype = '.gif';
			break;
		default:
			$pic_filetype = false;
	}
	return $pic_filetype;
}

function alert($msg){
	echo "<script>";
	echo "alert(\"$msg\");";
	echo "</script>";
}
function alert_href($msg, $href){
	echo "<script>";
	echo "alert(\"$msg\");";
	echo "window.location.href=\"$href\";";
	echo "</script>";
}
function href($href){
	echo "<script>";
	echo "window.location.href=\"$href\";";
	echo "</script>";
}
function alert_history($msg){
	echo "<script>";
	echo "alert(\"$msg\");";
	echo "history.go(-1);";
	echo "</script>";
}
function history($goid){
	$goid	= $goid==""?"-1":$goid;
	echo "<script>";
	echo "history.go($goid);";
	echo "</script>";
}

########## 数据库操作函数 ##########################################################

/**
 * 功能：删除某条或者某些记录
 * 参数：$dtable 数据表名；$where 查询条件
 * 返回：是否删除
**/
function deleteRecord($dtable,$where){
	global $dbconn;
	$query = "delete from $dtable where $where";
	$dbconn->Query($query);
	return $dbconn->returnAffected();
}
/**
 * 功能：条件查询，返回记录条数
 * 参数：$dtable 数据表名；$where 查询条件 $type: 查询返回类型 1为返回数组
 * 返回：条数
**/
function getRecordCount($dtable,$where,$type=''){
	global $dbtable,$dbconn;
	if ($type==1){
		$limit = '';
	}else {
		$limit = ' limit 1';
	}
	$query = "select count(*) from $dtable $where $limit";
	if ($type==1){
		return $dbconn->GetOneLineField($query);
	}else {
		return $dbconn->Getonefield($query);
	}
}
/**
 * 功能：条件查询，返回某个表的某个字段条数
 * 参数：$feild 返回的字段名；$dtable 数据表名；$where 查询条件  $type: 查询返回类型 1为返回数组
 * 返回：条数
**/
function getOneField($field,$dtable,$where,$type=''){
	global $dbtable,$dbconn;
	if( ! $dtable || ! $field ) return ; 
	if ($type==1){
		$limit = '';
	}else {
		$limit = ' limit 1';
	}
	$query = "select $field from $dtable $where $limit";
	if ($type==1){
		return $dbconn->GetOneLineField($query);
	}else {
		return $dbconn->Getonefield($query);
	}
}

?>